# lambda:
# 一个函数只有一个返回值,只有一句代码,lambda简化
# lambda可以接收多个参数,但是只有一个返回值
def fn1():
    return 200


print(fn1())
# lambda 参数:表达式
fn2 = lambda: 100
print(fn2())
# 计算a+b
fn3 = lambda a, b: a + b
print(fn3(10, 20))
print('---------------lambda 参数形式,无参,有参数,默认参数-----------------')
fn1 = lambda a, b, c=100: a + b + c

print(fn1(10, 20))
print('---------------可变参数*args,**kwargs-----------------')
fn1 = lambda *args: [i for i in args]
print(fn1(1, 2, 3, 4))
fn1 = lambda **kwargs: [i for i in kwargs]
print(fn1(key='value1', key2='value2'))
print()

print('---------------lambda的应⽤-----------------')
# 带判断的lambda
fn1 = lambda a, b: a if a > b else b
print(fn1(100, 500))
# 列表数据按字典key的值排序
students = [
    {'name': 1, 'age': 20},
    {'name': 2, 'age': 19}, ]
# reverse False就是升序,True就是降序
students.sort(key=lambda x: x['name'], reverse=False)
print(students)

# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)

print('---------------高阶函数-----------------')
print(abs(-1))
# 这个不仅四舍五入,还可以保留多少位小数
print(round(10.222, 1))
print(round(10.555, 1))
print()
print()
print()
print()

print('---------------内置高阶函数-----------------')
# map() 需求：计算 list1 序列中各个数字的2次⽅。
list1 = [1, 2, 3, 4, 5]


def fun(x):
    return x ** 2


list1 = map(fun, list1)
print(list(list1))

# reduce()
list1 = [1, 2, 3, 4, 5]


def fun(a, b):
    return a + b


import functools

sum = functools.reduce(fun, list1)
print(sum)


def fun(a):
    return  a>3
    pass


list2 = filter(fun, list1)
print(list(list2))
